<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
    <style>
        li {
            list-style: none;
        }

        div {
            margin: 5px;
        }
    </style>
</head>

<body>
    <div id="app">
        <div>
            <h3>v-model初识</h3>
            <p>
                请输入:<input type="text" v-model="message">
            </p>
            <p>
                <!-- input输入框的内容发生改变 => data中的数据也会同步更新 -->
                message:{{message}}
            </p>
            <p>
                <!-- 当数据改变 视图更新 input框的value值改变 -->
                <button @click="message=''">清空</button>
            </p>
        </div>

        <div>
            <h3>Vue实现v-model</h3>
            <p>
                请输入:<input type="text" @input="inputHandler" :value="msg">
            </p>
            <p>
                <!-- input输入框的内容发生改变 => data中的数据也会同步更新 -->
                message:{{msg}}
            </p>
            <p>
                <!-- 当数据改变 视图更新 input框的value值改变 -->
                <button @click="msg=''">清空</button>
            </p>
        </div>
    </div>
</body>
<script>

    // 可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。
    // 它会根据控件类型自动选取正确的方法来更新元素
    // v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据

    // 双向数据绑定
    // 操作视图(view) -> 会影响数据    (输入框内容发生改变 -> 内容同步到数据)
    // 操作数据(Model) -> 会影响视图


    // v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件：
    // text 和 textarea 元素使用 value property 和 input 事件；
    // checkbox 和 radio 使用 checked property 和 change 事件；
    // select 字段将 value 作为 prop 并将 change 作为事件。

    var vm = new Vue({
        el: "#app",
        data: {
            message: "",
            msg: "",
        },
        methods: {
            inputHandler(e) {
                console.log("输入框内容发生改变", e.target);
                this.msg = e.target.value;

            }
        }

    })



</script>

</html>